gdk: Clear GL context when window is withdrawn
authorAndrea Azzarone <andrea.azzarone@canonical.com>
Wed, 25 Oct 2017 13:37:36 +0000 (09:37 -0400)
committerKen VanDine <kvandine@gnome.org>
Wed, 25 Oct 2017 13:37:36 +0000 (09:37 -0400)
Some clients (e.g. gnome-online-accounts) quickly unmap and map
a window. With some backends the backend surface will be replaced
causing the application to crash because the GL context is still
using the old surface. Clearing the GL context when a window is
withdrawn fixes this.

https://bugzilla.gnome.org/show_bug.cgi?id=789141

gdk/gdkwindow.c

index 7e1a07933303136a550564200d77826bc6fb5126..08445870e82290ae0039edcda9536af372986252 100644 (file)
@@ -3903,6 +3903,7 @@ gdk_window_withdraw (GdkWindow *window)
 {
   GdkWindowImplClass *impl_class;
   gboolean was_mapped;
+  GdkGLContext *current_context;
 
   g_return_if_fail (GDK_IS_WINDOW (window));
 
@@ -3925,6 +3926,10 @@ gdk_window_withdraw (GdkWindow *window)
            _gdk_make_event (window, GDK_UNMAP, NULL, FALSE);
        }
 
+      current_context = gdk_gl_context_get_current ();
+      if (current_context != NULL && gdk_gl_context_get_window (current_context) == window)
+        gdk_gl_context_clear_current ();
+
       recompute_visible_regions (window, FALSE);
       gdk_window_clear_old_updated_area (window);
     }